#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division # biblio https://engees.unistra.fr/fileadmin/user_upload/pdf/gsp/Cours_MCDA_AN.pdf Criteres = [ 'Cr1', 'Cr2', 'Cr3', 'Cr4', 'Cr5' ] Poids = { 'Cr1':0.1, 'Cr2':0.35, 'Cr3':0.1, 'Cr4':0.1, 'Cr5':0.35 } Actions = [ 'T1', 'T2', 'T3', 'T4', 'T5' ] Performances = { 'T1': { 'Cr1':2.63, 'Cr2': 5.26, 'Cr3': 52.63, 'Cr4': 84.21, 'Cr5': 26.30 }, 'T2': { 'Cr1':0.00, 'Cr2': 0.00, 'Cr3':492.31, 'Cr4':492.31, 'Cr5': 0.00 }, 'T3': { 'Cr1':0.00, 'Cr2': 10.13, 'Cr3': 20.25, 'Cr4': 20.25, 'Cr5': 405.06 }, 'T4': { 'Cr1':0.00, 'Cr2': 0.00, 'Cr3': 0.00, 'Cr4': 0.00, 'Cr5': 0.00 }, 'T6': { 'Cr1':0.00, 'Cr2':210.53, 'Cr3':280.70, 'Cr4':280.70, 'Cr5':1171.93 } } Classes = ['Bon', 'Moyen', 'Mauvais' ] Seuils = { # seuils (g,q,p) de Bon à Moyen 'Bon': { 'Cr1': ( 0.50, 0.5, 1.0), 'Cr2': ( 2.23, 0.5, 1.0), 'Cr3': (37.53, 0.5, 1.0), 'Cr4': (37.96, 0.5, 1.0), 'Cr5': (40.67, 0.5, 1.0) }, # seuils (g,q,p) de Moyen à Mauvais 'Moyen': { 'Cr1': ( 7.0, 0.5, 1.0), 'Cr2': ( 29.0, 0.5, 1.0), 'Cr3': (126.7, 0.5, 1.0), 'Cr4': (128.0, 0.5, 1.0), 'Cr5': (300.0, 0.5, 1.0) } } Lambda = 0.76 def Concordance(a, bh): conc = 0.0 for critere in Criteres: poids = Poids[critere] ga = Performances[a][critere] gbh,qbh,pbh = Seuils[bh][critere] if gbh - ga >= pbh: conc += 1.0 * poids elif gbh - ga <= qbh: conc += 0.0 * poids else: conc += ((pbh + ga - gbh) / (pbh - qbh)) * poids return conc for classe in Classes[:-1]: print classe, Concordance('T1', classe)